home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
amok_lha
/
amok40.lha
/
DoubleBuffering
/
Chemie.mod
< prev
next >
Wrap
Text File
|
1993-08-15
|
8KB
|
291 lines
(***************************************************************************
:Program. Chemie.mod
:Author. Jürgen Zimmermann
:Address. Ringstraße 6, 6719 Altleiningen, West-Germany
:Phone. 06356/1456
:ShortCut. [JnZ]
:Support. -
:Version. 1.61
:Date. 1. November 1989
:Copyright. PD
:Language. MODULA-II
:Translator. M2Amiga 3.3d
:Contents. Demoprogramm für Modul "DoubleBuffering"
:Remark. Ich würde mich sehr über Kontakt mit anderen M2Amiga-Usern
:Remark. und MIDI-Freaks freuen.
:Usage. Nur starten.
****************************************************************************)
MODULE Chemie; (* Version 1.61 from 1th November, 1989 *)
(*(* $R- $S- $N- $F- *)*)
FROM DoubleBuffering IMPORT OpenDoubleView, CloseDoubleView, SwapBuffers,
CleanDrawBuffer, GetDrawRastPort;
FROM SYSTEM IMPORT ADR, ADDRESS, BITSET;
(* FROM InOut IMPORT WriteLn, WriteString, WriteInt; *)
(* FROM RealInOut IMPORT ReadReal, WriteReal; *)
FROM Graphics IMPORT SetAPen, SetDrMd, RectFill, jam1, Move, DrawModes,
DrawModeSet, ViewModeSet, ViewModes, RastPort,
RastPortPtr, SetRGB4, GfxBase, GfxBasePtr, View, ViewPtr,
ViewPort,ViewPortPtr,AllocRaster, MrgCop,MakeVPort,
InitBitMap, LoadView, InitRastPort, WaitTOF, GetColorMap,
FreeColorMap,FreeRaster,FreeVPortCopLists,FreeCprList,
BitMap, BitMapPtr, RasInfo, CprlistPtr, Cprlist,
InitVPort, InitView;
FROM Dos IMPORT Delay;
IMPORT Graphics;
FROM Arts IMPORT TermProcedure, Assert, RemoveTermProc;
CONST breite=320;
hoehe=256;
VAR DeltaProdukt: REAL; (* Für Abbruch!!! *)
CONST Gefaessbreite = 200.0;
Gefaesshoehemax = 230.0;
VAR Edukt1Hoehe: REAL;
Edukt2Hoehe: REAL;
ProduktHoehe: REAL;
Edukt1Rohr : REAL;
Edukt2Rohr : REAL;
ProduktRohr: REAL;
Edukt1GesamtVolumen: REAL;
Edukt2GesamtVolumen: REAL;
ProduktGesamtVolumen: REAL;
Edukt1Faktor: REAL;
Edukt2Faktor: REAL;
PROCEDURE Initialisieren;
BEGIN
Edukt1GesamtVolumen:=Edukt1Hoehe*Gefaessbreite;
Edukt2GesamtVolumen:=Edukt2Hoehe*Gefaessbreite;
ProduktGesamtVolumen:=ProduktHoehe*Gefaessbreite;
END Initialisieren;
PROCEDURE Eingabe;
BEGIN
(* WriteString("Höhe Edukt1? ");
ReadReal(Edukt1Hoehe);
WriteLn;
WriteString("Höhe Edukt2? ");
ReadReal(Edukt2Hoehe);
WriteLn;
WriteString("Höhe Produkt? ");
ReadReal(ProduktHoehe);
WriteLn;
WriteString("Reaktionsfaktor Edukt1? ");
ReadReal(Edukt1Faktor);
WriteLn;
WriteString("Reaktionsfaktor Edukt2? ");
ReadReal(Edukt2Faktor);
WriteLn;
WriteString("Breite Rohr Edukt1? ");
ReadReal(Edukt1Rohr);
WriteLn;
WriteString("Breite Rohr Edukt2? ");
ReadReal(Edukt2Rohr);
WriteLn;
WriteString("Breite Rohr Produkt? ");
ReadReal(ProduktRohr);
WriteLn;
*)
Edukt1Hoehe :=50.0;
Edukt2Hoehe :=150.0;
ProduktHoehe:=40.0;
Edukt1Rohr :=1.0;
Edukt2Rohr :=4.0;
ProduktRohr:=2.5;
Edukt1Faktor:=1.0;
Edukt2Faktor:=3.0;
END Eingabe;
(* PROCEDURE Ausgabe;
BEGIN
WriteString("Edukt1: ");
WriteReal(Edukt1Hoehe,10,7);
WriteString(", Edukt2: ");
WriteReal(Edukt2Hoehe,10,7);
WriteString(", Produkt: ");
WriteReal(ProduktHoehe,10,7);
WriteLn;
END Ausgabe; *)
PROCEDURE SyntheseAnalyse;
VAR Edukt1Analyse: REAL;
Edukt2Analyse: REAL;
ProduktSynthese: REAL;
Edukt1RueckVolumen: REAL;
Edukt2RueckVolumen: REAL;
Edukt1RohrVolumen: REAL;
Edukt2RohrVolumen: REAL;
ProduktRohrVolumen: REAL;
Edukt1VolumenNeu: REAL;
Edukt2VolumenNeu: REAL;
ProduktVolumenNeu: REAL;
Gesamtfaktor: REAL;
Faktorenquotient: REAL;
Volumenquotient: REAL;
BEGIN
Gesamtfaktor:=Edukt1Faktor+Edukt2Faktor;
Edukt1RohrVolumen:=Edukt1Hoehe*Edukt1Rohr; (* Volumina der Flüssigkeiten*)
Edukt2RohrVolumen:=Edukt2Hoehe*Edukt2Rohr; (* in den Rohren ausrechnen *)
ProduktRohrVolumen:=ProduktHoehe*ProduktRohr;
DeltaProdukt:=ProduktGesamtVolumen;
Edukt1VolumenNeu:=Edukt1GesamtVolumen-Edukt1RohrVolumen; (* "Rohrvolumen " *)
Edukt2VolumenNeu:=Edukt2GesamtVolumen-Edukt2RohrVolumen; (* subtrahieren *)
ProduktVolumenNeu:=ProduktGesamtVolumen-ProduktRohrVolumen;
Edukt1Analyse:=(ProduktRohrVolumen*Edukt1Faktor)/Gesamtfaktor;
Edukt2Analyse:=(ProduktRohrVolumen*Edukt2Faktor)/Gesamtfaktor;
(* Volumen, die aus der Analyse des Produktes entstehen. *)
Edukt1VolumenNeu:=Edukt1VolumenNeu+Edukt1Analyse;
Edukt2VolumenNeu:=Edukt2VolumenNeu+Edukt2Analyse;
Edukt1RueckVolumen:=0.0;
Edukt2RueckVolumen:=0.0;
Faktorenquotient:=Edukt1Faktor/Edukt2Faktor;
Volumenquotient:=Edukt1RohrVolumen/Edukt2RohrVolumen;
IF (Faktorenquotient # Volumenquotient)
THEN
IF (Faktorenquotient > Volumenquotient)
THEN (* zuviel Edukt2!!! *)
Edukt2RueckVolumen:=Edukt2RohrVolumen-((Edukt1RohrVolumen/
Edukt1Faktor)*Edukt2Faktor);
ELSE (* zuviel Edukt1!!! *)
Edukt1RueckVolumen:=Edukt1RohrVolumen-((Edukt2RohrVolumen/
Edukt2Faktor)*Edukt1Faktor);
END; (* IF *)
END; (* IF *)
Edukt1RohrVolumen:=Edukt1RohrVolumen-Edukt1RueckVolumen;
Edukt2RohrVolumen:=Edukt2RohrVolumen-Edukt2RueckVolumen;
Edukt1VolumenNeu:=Edukt1VolumenNeu+Edukt1RueckVolumen;
Edukt2VolumenNeu:=Edukt2VolumenNeu+Edukt2RueckVolumen;
ProduktSynthese:=Edukt1RohrVolumen+Edukt2RohrVolumen;
ProduktVolumenNeu:=ProduktVolumenNeu+ProduktSynthese;
Edukt1GesamtVolumen:=Edukt1VolumenNeu;
Edukt2GesamtVolumen:=Edukt2VolumenNeu;
ProduktGesamtVolumen:=ProduktVolumenNeu;
DeltaProdukt:=DeltaProdukt-ProduktVolumenNeu;
Edukt1Hoehe:=Edukt1GesamtVolumen/Gefaessbreite;
Edukt2Hoehe:=Edukt2GesamtVolumen/Gefaessbreite;
ProduktHoehe:=ProduktGesamtVolumen/Gefaessbreite;
END SyntheseAnalyse;
PROCEDURE InitScreen;
BEGIN
OpenDoubleView(0,0,320,256,3,ViewModeSet{});
END InitScreen;
PROCEDURE Block (Raster: RastPortPtr;
Color, xstart, ystart, xend, yend: INTEGER);
BEGIN
SetAPen (Raster, Color);
SetDrMd (Raster, jam1);
RectFill (Raster, xstart, ystart, xend, yend);
END Block;
PROCEDURE Zeichnen;
VAR RP: RastPortPtr;
x: REAL;
BEGIN
x:=(REAL(breite)/640.0);
RP:=GetDrawRastPort();
Block(RP,0,0,0,breite-1,hoehe-1); (* Bitmap löschen *)
Block(RP,2,1,(hoehe-TRUNC(Edukt1Hoehe)-1),TRUNC(200.0*x),hoehe-1);
Block(RP,3,TRUNC(211.0*x),(hoehe-TRUNC(Edukt2Hoehe)-1),
TRUNC(410.0*x),hoehe-1);
Block(RP,4,TRUNC(421.0*x),(hoehe-TRUNC(ProduktHoehe)-1),
TRUNC(620.0*x),hoehe-1);
SwapBuffers;
END Zeichnen;
PROCEDURE CloseAll;
BEGIN
CloseDoubleView;
END CloseAll;
BEGIN
TermProcedure(CloseAll);
Eingabe;
Initialisieren;
InitScreen;
LOOP
SyntheseAnalyse;
(* Ausgabe; *)
Zeichnen;
IF (TRUNC(DeltaProdukt)=0)
THEN
Delay(500);
EXIT;
END; (* IF *)
END; (* LOOP *)
RemoveTermProc(CloseAll);
CloseAll;
END Chemie.